Kotlin 是一個在 2011 年由 JetBrains 發表的全新程式語言,不過直到 Google Android 團隊在 2017 年宣佈其成為官方優先支援(First-Class Support)、2019 年正式成為首選語言後,才廣為開發者所知。隨著 Kotlin 在 Android 開發上水漲船高,在程式語言排行榜也逐漸攀升,依照 RedMonk 的調查,Kotlin 在 2019 年已經擠進熱門排行榜前 20 名,是該排行榜進步最快的程式語言。而在 Upwork 的開發者薪資調查裡,Kotlin 名列第五。日前 Kotlin 1.4 版本正式發佈,除了強化跨平台 Mobile 開發外,在前、後端也有更好的支援及應用面向,後勢看漲!
筆者的開發背景以後端為主,一直以來專注在 Web、使用的是弱型別語言。在新的一年決定跨出舒適圈,入手一門強型別語言,並以跨平台開發為目標,讓自己的守備範圍可以更寬廣,因此選擇 Kotlin 做為學習目標。除了自己私心的原因外,Kotlin 也有幾個知名的優點如下:
Java 讓許多開發者詬病的就是其語法設計需要花很多時間來寫樣板(boilerplate)程式碼,雖然現代 IDE 如 IntelliJ IDEA 可以非常聰明的自動產生或補齊,但當程式碼修改時,一樣得花許多時間刪除或重新產生。Kotlin 是一個相對年輕的語言,在設計之初就參考了眾多現代語言最佳化,其簡潔、富表達力的語法可以讓開發者更好維護。
一直以來,JetBrains 都是使用 Java 開發產品。但即便是 Kotlin 原創公司,開發語言也不可能一夕之間說換就換。因此 Kotlin 設計之初,就將與 Java 的相容性設定為必要條件。也就是說,您可以在專案裡用 Kotlin 來開發新功能,原有的 Java 程式碼可以與 Kotlin 一起編譯。這樣的特性,不僅讓原本由 Java 開發的專案可以無縫地遷移,也讓 Kotlin 能直接取用 Java 開發生態系裡所有現存套件。
跨平台一直是開發者的夢與痛。Kotlin 在跨平台議題上付出了很大的努力,您可以用 Kotlin 撰寫相容於 JVM 的程式(Server-Side 及 Android)、也可以用 Kotlin/Native 撰寫跨足 iOS 的原生程式、甚至可以用 Kotlin/JS 來寫前端。有別於其他跨平台開發工具「寫一次、在所有平台上執行」的設計,Kotlin 讓您「用一種語言在所有平台開發、平台間共享邏輯」的策略,可以在跨平台、原生、效能各方面取得最好的平衡。
身為開發者,我們都喜歡且支持開放原始碼專案。我們相信,透過開放原始碼,我們將建構一個自由、安全的軟體世界。但不可否認的,一個程式語言等級的軟體專案需要非常龐大的開發資源,單靠開發者志願貢獻來維持實有難度,其中也不乏失敗案例。而開發者在意的不只是原始碼是否開放,該程式語言是否穩定可用於商業環境、是否能在技術林立的現代持續發展也是評估的指標。
Kotlin 是由 JetBrains 所資助開發,並在公司內部已長期使用,證明可應用於商業環境。另外,也與 Google 合組 Kotlin 基金會 ,確保其穩健發展。從這些條件看來,Kotlin 不僅是一個開放原始碼專案,後面也有基金會及兩大國際公司撐腰,對於使用這個程式語言有很大的保障。相信這也是許多技術長、資深開發者非常在意的點。
在開發者的每日工作裡,其實有很大一塊都是在做資料處理。我們抓取、截取、爬取資料,對資料做整理、過濾、轉格式,最後輸出成有系統、有意義的資訊。而在資料處理這一塊,有很大一部份的工作都是跟 Collection 有關。Collection 簡單來說,就是一群相關聯資料的集合,是個在各程式語言裡普遍常見的資料類型,從最原始的 Array,到重複與否的 List、Set,以及 Key-Value 對應的 Map 都屬於這種物件。
Kotlin 團隊深知資料處理的重要性,在標準函式庫(Standard Library)裡即提供一系列直覺、好用、全面的工具,在 API 設計上,也融合了許多 Functional Programing 的特性,若能好好運用,可以減少很多重複冗長的工作,對操作資料有很大的幫助。
筆者因舉辦 Kotlin 讀書會、Kotlin 練功場 等活動,在翻查官方文件的過程中發現 Kotlin Collection 的存在。接著又因為有幾次分享 Kotlin Script、Kotlin DSL 的機會,這才發現 Collection 是各種進階知識的基石,因此決定針對這個主題好好鑽研並分享。
本系列文章將從最基礎的 Kotlin 知識下手,包括開發環境、工具的建置、基礎語法、程式執行…等;接著會介紹各種 Collection 類別,以及標準函式庫裡常用的 API;並持續深入 Generic、Lambda、High Order Function、Scope Function 等進階設計。透過範例及重造輪子,逐步拆解整個 Collection 設計的底層。
不論您已經是 Kotlin 開發者,希望對 Collection 有更深入的認識;或是您對 Kotlin 有興趣,想透過 Collection 做為引子踏入 Kotlin 世界,都希望這系列的文章,能讓您更聰明地處理資料、寫出更好懂、更好維護的程式,輕鬆掌握 Kotlin Collection 的賞玩門道。
準備好了嗎?讓我們一起抱著探索的心,一起踏上 Kotlin Collection 的賞玩之路!